package com.wteam.controller.common;

import com.wteam.framework.common.enums.ResultCode;
import com.wteam.framework.common.enums.ResultUtil;
import com.wteam.framework.common.vo.ResultMessage;
import com.wteam.framework.modules.community.dto.SdRequestImgDto;
import com.wteam.framework.modules.community.dto.SdRequestTxtDto;
import com.wteam.framework.modules.community.entity.SdModel;
import com.wteam.framework.modules.community.service.SdModelService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Parameters;
import io.swagger.v3.oas.annotations.enums.ParameterIn;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * @author doncic
 * @date 2023/7/14 17:03
 */
@Slf4j
@RestController
@Tag(name = "模型相关接口")
@RequestMapping("/api/model")
public class ModelController {

    @Autowired
    private SdModelService sdModelService;

    /**
     * 展示出模型库里所有模型
     *
     * @return
     */
    @Operation(summary = "获取全部模型展示")
    @GetMapping("/getAllModel")
    public ResultMessage getAllModel() {
        return sdModelService.getAllModel();
    }

    /**
     * 获取到模型信息的同时，也要查出对应的用户信息
     *
     * @param id
     * @return
     */

    @Operation(summary = "查询模型详细信息")
    @GetMapping("/{id}")
    public ResultMessage getModelDetails(@PathVariable("id") String id) {
        return sdModelService.getModelDetails(id);
    }


    /**
     * 展示用户个人主页模型
     * 这里是拿着传入的用户id去model表里面进行查询
     *
     * @param id 用户id
     * @return
     */
    @Operation(summary = "展示用户模型主页")
    @GetMapping("/showModelByMember/{id}")
    public ResultMessage showModelByMember(@PathVariable("id") Long id) {
        return sdModelService.showModelByMember(id);
    }


    /**
     * 文生图
     * 但是本地调试的时候参数传递有错误
     * 与前端对接的时候再调试
     * 这里主要是参数的传递问题
     *
     * @param sdRequestTxtDto
     * @return
     */
    @Operation(summary = "用户调用文生图接口")
    @PostMapping("/txt2img/{id}")
    public ResultMessage generateTxt2Img(@PathVariable("id") Long id, @RequestBody SdRequestTxtDto sdRequestTxtDto) {
        return sdModelService.generateTxt2Img(id, sdRequestTxtDto);
    }


    /**
     * 图生图
     * 但是本地调试的时候参数传递有错误
     * 与前端对接的时候再调试
     * 这里主要是参数的传递问题
     *
     * @param sdRequestImgDto
     * @return
     */
    @Operation(summary = "用户调用图生图接口")
    @PostMapping("/img2img")
    public ResultMessage generateImg2Img(@RequestBody SdRequestImgDto sdRequestImgDto) {
        return sdModelService.generateImg2Img(sdRequestImgDto);
    }

    /**
     * 用户上传模型
     *
     * @param sdModel
     * @return
     */
    @Operation(summary = "上传模型")
    @PostMapping("/uploadModel")
    public ResultMessage uploadModel(@RequestBody SdModel sdModel) {
        return sdModelService.uploadModel(sdModel);
    }


    /**
     * 更改模型信息
     * 这边所有对应的用户信息后面还要修改的
     *
     * @param id
     * @param sdModel
     * @return
     */
    @Operation(summary = "修改模型")
    @PutMapping("/{id}")
    public ResultMessage updateModel(@PathVariable("id") Long id, @RequestBody SdModel sdModel) {
        sdModel.setId(id);
        return sdModelService.updateById(sdModel)
                ? ResultUtil.success()
                : ResultUtil.error(ResultCode.ERROR);
    }


    /**
     * 根据id删除模型
     *
     * @param id
     * @return
     */

    @Operation(summary = "用户删除模型")
    @DeleteMapping("/{id}")
    public ResultMessage deleteModel(@PathVariable("id") Long id) {
        return sdModelService.deleteModel(id);


    }

}
